import numpy as np
import matplotlib.pyplot as plt
def replace_spike_data(data, threshold, new_value):
    # 初始化一个计数器，用于计算连续峰值的长度
    spike_count = 0
    k=0
    for i in range(len(data) - 1):
        # 检查当前数据点与下一个数据点的差值是否超过阈值
        if k==0:
            k=i
        if abs(data[k] - data[i + 1]) > threshold:
            # 增加计数器
            spike_count += 1
            if k==0:
                k=i
        else:
            # 如果当前点是峰值区间的开始，且计数器大于0（即存在连续峰值）
            if spike_count > 0:
                # 替换当前点及之后的连续峰值为新值
                data[k+1:k+spike_count+1] = [new_value] * (spike_count)
                # 更新i以跳过已经处理的部分
                i += spike_count
            # 如果不是，重置标记和计数器
            spike_count = 0
            k=0
    return data

# 测试数据
##data = [1, 2, 5, 13, 15, -10, 5, 10, 5, 2, 1]
data=np.random.normal(23.5,0.3,2000)
print(data)
threshold = 0.2
new_value = 23.5
data1=data.copy()
# 调用函数
data2= replace_spike_data(data1, threshold, new_value)
print(data2)
fig,ax=plt.subplots()
ax.plot(data)
ax.plot(data2)
plt.show()
